package com.j180.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@Controller
@RequestMapping("/two")
@SessionAttributes("msg")  //
public class TwoController {

    /**
     * @SessionAttributes():它只能在类上使用，
     * 作用：表示把请求对象中存入的数据 提升到sesssion作用域 （注意： request有一个。session也有一个）
     * @return
     */
    @GetMapping("/test1")
    public String  test1(Model model){

        //model 存入的数据默认是在reqesut作用域中
        model.addAttribute("msg","request");

        return "two";
    }

    @GetMapping("/test2")
    public String  test2(HttpSession session){

      String msg = (String) session.getAttribute("msg");

        System.out.println("twoTest==>"+msg);

        return "two";
    }

    /**
     *   进行重定向和转发 （springMvc 默认是转发）
     *
     */
    @GetMapping("/zhuan")
    public String zhuan(){

        System.out.println("进行页面的跳转=====》》");
       //"forward:two" 转发的法式  使用转发和重定向时  视图解析器就不起作用了。
       // return "forward:../pages/two.jsp";
       //重定向
        return "redirect:../pages/two.jsp";
    }
    @GetMapping("zhuang2")
    public void zhuang2(HttpServletRequest request,HttpServletResponse response){

       /* try {
            request.getRequestDispatcher("../pages/two.jsp").forward(request,response);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
*/

        try {
            response.sendRedirect("../pages/two.jsp");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

      @GetMapping("/test3")
     public ModelAndView test3(){

          ModelAndView modelAndView = new ModelAndView();

          modelAndView.addObject("msg","modeAndView");

          modelAndView.setViewName("two");

          return modelAndView;
     }

}
